/**
 * 示例说明
 * <p>
 * HelloOSS是OSS Java SDK的示例程序，您可以修改endpoint、accessKeyId、accessKeySecret、bucketName后直接运行。
 * 运行方法请参考README。
 * <p>
 * 本示例中的并不包括OSS Java SDK的所有功能，详细功能及使用方法，请参看“SDK手册 > Java-SDK”，
 * 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
 * <p>
 * 调用OSS Java SDK的方法时，抛出异常表示有错误发生；没有抛出异常表示成功执行。
 * 当错误发生时，OSS Java SDK的方法会抛出异常，异常中包括错误码、错误信息，详细请参看“SDK手册 > Java-SDK > 异常处理”，
 * 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
 * <p>
 * OSS控制台可以直观的看到您调用OSS Java SDK的结果，OSS控制台地址是：https://oss.console.aliyun.com/index#/。
 * OSS控制台使用方法请参看文档中心的“控制台用户指南”， 指南的来链接地址是：https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
 * <p>
 * OSS的文档中心地址是：https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
 * OSS Java SDK的文档地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
 */

package xyz.xiezc.spider.upload;

import cn.hutool.setting.Setting;
import com.aliyun.oss.OSSClient;
import lombok.extern.slf4j.Slf4j;
import xyz.xiezc.ioc.annotation.Component;
import xyz.xiezc.ioc.annotation.InitMethod;
import xyz.xiezc.ioc.annotation.Inject;

import java.io.File;
import java.util.concurrent.ThreadPoolExecutor;

@Slf4j
@Component
public class OssClient {


    @Inject
    Setting setting;

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

    OSSClient ossClient;
    ThreadPoolExecutor threadPoolExecutor;

    @InitMethod
    public void init() {
        this.endpoint = setting.getByGroup("endpoint", "oss");
        this.accessKeyId = setting.getByGroup("accessKeyId", "oss");
        this.accessKeySecret = setting.getByGroup("accessKeySecret", "oss");
        this.bucketName = setting.getByGroup("bucketName", "oss");
        ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

    }


    public void upObject(String name, File file) {
        try {
            ossClient.putObject(bucketName, name, file);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw e;
        }
    }

    public boolean exist(String name) {
        return ossClient.doesObjectExist(bucketName, name);
    }
}
